/**
 * 文件名：@AfwRuntimeException.java <br/>
 * 包名：cn.efunbox.afw.core.exception <br/>
 * 项目名：afw-core <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.core.exception;

import cn.efunbox.afw.core.entity.ApiCode;

/**
 * 类名：AfwRuntimeException  <br />
 *
 * 功能：运行时异常基类
 *
 * @author xtwin <br />
 * 创建时间：2015年12月2日 下午6:19:55  <br />
 * @version 2015年12月2日
 */
public class AfwRuntimeException extends RuntimeException implements TraceableException {
	
	/** add by xtwin 2015年12月2日 下午6:22:04 */
	private static final long serialVersionUID = -9017643900656069989L;

	// 参数
	private Object[] parameters;
	
	// 错误代码，默认为0001
	private String code;


	/**
	 * 构造方法
	 */
	public AfwRuntimeException() {
		this("afw.exception.runtime");
	}
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(ApiCode code) {
		this(code.getMessage(),String.valueOf(code.getCode()));
	}
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(Throwable cause) {
		this("afw.exception.runtime", cause);
	}
	
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(String message) {
		this(message, (String) null);
	}
	
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(String message, Throwable cause) {
		this(message, (String) null, cause);
	}
	
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(String message, Object[] parameters) {
		this(message, null, parameters);
	}
	
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(String message, Object[] parameters, Throwable cause) {
		this(message, null, parameters, cause);
	}
	
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(String message, String code) {
		this(message, code, null, null);
	}
	
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(String message, String code, Throwable cause) {
		this(message, code, null, cause);
	}
	
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(String message, String code, Object[] parameters) {
		super(message);
		
		// 错误码
		this.code = code;
		
		// 参数
		this.parameters = parameters;
	}
	
	/**
	 * 构造方法
	 */
	public AfwRuntimeException(String message, String code, Object[] parameters, Throwable cause) {
		super(message, cause);
		
		// 错误码
		this.code = code;
		
		// 参数
		this.parameters = parameters;
	}

	/**
	 * @version 2015年12月2日-下午6:22:19
	 */
	public void setParameters(Object[] parameters) {
		this.parameters = parameters;
	}

	/**
	 * @version 2015年12月2日-下午6:22:19
	 */
	public void setCode(String code) {
		this.code = code;
	}

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年8月5日 上午2:06:19<br/>
	 * 
	 * @return <br/>
	 * @see cn.efunbox.afw.core.exception.TraceableException#getLocalMessage()
	 */
	@Override
	public String getLocalMessage() {
		return getMessage();
	}

	/**
	 * @version 2016年8月5日-上午2:06:49
	 */
	public Object[] getParameters() {
		return parameters;
	}

	/**
	 * @version 2016年8月5日-上午2:06:49
	 */
	public String getCode() {
		return code;
	}
}
